package moduloRemoto.bo;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import moduloRemoto.bo.interfaces.AtividadeRemote;
import moduloRemoto.dao.interfaces.ServerLocal;
import moduloRemoto.pojo.Atividade;
import moduloRemoto.pojo.AtividadePK;

import org.jboss.annotation.ejb.RemoteBinding;

@Stateless
@Remote(AtividadeRemote.class)
@RemoteBinding(jndiBinding="ejb/atividade")
public class AtividadeBO implements AtividadeRemote
{
	@EJB 
	private ServerLocal dao;
	
	
	@Override
	public Atividade persistir(Atividade objAti)
	{
		if (objAti == null)
			return null;

		try
		{
			if(objAti.getPrimaryKey().getIdAti() == 0){
				objAti = dao.insert(objAti);
			}
			else{
				objAti = dao.update(objAti);
			}
			
			
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}

		return objAti;
	}

	@Override
	public Boolean excluir(int idAti, int idCol, int idTar)
	{
		if ((idAti <= 0) || (idCol <= 0) || (idTar <= 0))
			return false;
		
		try
		{
			Atividade objAti = this.carregarObjeto(idAti, idCol, idTar);			

			if (objAti != null)				
				dao.remove(objAti);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return false;
		}
		
		return true;
	}
	
	@Override
	public Atividade carregarObjeto(int idAti, int idCol, int idTar)
	{
		if ((idAti <= 0) || (idCol <= 0) || (idTar <= 0))
			return null;
		
		Atividade objAti = null;
		
		try
		{
			objAti = dao.find(Atividade.class, new AtividadePK(idAti, idTar, idCol));
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return objAti;
	}
	
	
	@Override
	public List<Atividade> getAtividadesByTarefa(int idTar)
	{
		List<Atividade> listaAtividades = new ArrayList<Atividade>();
		
		try
		{
			for (Object objeto : dao.executeQuery("SELECT a FROM Atividade a WHERE a.primaryKey.tarefaAti = " + idTar))
				listaAtividades.add((Atividade)objeto);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

		return listaAtividades;
	}


	@Override
	public List<Atividade> getAtividadesByColaborador(int idCol)
	{
		List<Atividade> listaAtividades = new ArrayList<Atividade>();
		
		try
		{
			for (Object objeto : dao.executeQuery("SELECT a FROM Atividade a WHERE a.primaryKey.idCol = " + idCol))
				listaAtividades.add((Atividade)objeto);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

		return listaAtividades;
	}
}